package net.hymnal.church;

import android.content.Context;
import android.content.SharedPreferences;

import static net.hymnal.church.Constants.NEGATIVE_THEME_SETTING_KEY;
import static net.hymnal.church.Constants.DEFAULT_TEXT_SIZE;
import static net.hymnal.church.Constants.TEXT_SIZE_SETTING_KEY;

/**
 * Клас настроек, достает настройки/сохраняет в Shared Preferences
 */
public class Settings {
    /**
     * Рекомендуемый Google способ хранить настройки
     */
    private SharedPreferences sharedPreferences;

    /**
     * Так как Shared Preferences требует context активити, с которого вызываеться,
     * поэтому в каждом классе нужно создавать свой экземпляр этого класса
     */
    public Settings(Context context) {
        sharedPreferences = context.getSharedPreferences(Settings.class.getName(), Context.MODE_PRIVATE);
    }

    /**
     * Переключить тему оформления во всем приложении<br>
     * Автоматически сохраняет в Shared Preferences
     */
    public void switchTheme() {
        //Открываем доступ к редактированию настроек
        SharedPreferences.Editor editor = sharedPreferences.edit();
        //Проверяем или выбрана негативная (противоположные цвета) тема
        if (sharedPreferences.getBoolean(NEGATIVE_THEME_SETTING_KEY, false))
            editor.putBoolean(NEGATIVE_THEME_SETTING_KEY, false);
        else editor.putBoolean(NEGATIVE_THEME_SETTING_KEY, true);
        //Обязательно сохраняем изменения
        editor.commit();
    }

    /**
     * Метод проверяет или выбрана негативная (противоположные цвета) тема,
     * что бы вернуть идентификатор (android.R.style.{needed theme}) подходящей темы
     *
     * @return идентификатор темы для применения<br>Theme_Black=16973832<br>Theme_Light=16973836
     */
    public int getTheme() {
        if (sharedPreferences.getBoolean(NEGATIVE_THEME_SETTING_KEY, false))
            return android.R.style.Theme_Black;
        else return android.R.style.Theme_Light;
    }

    /**
     * В случаи, если размер не установлен (например, если приложение
     * загружается впервые, то устанавливается константа
     * DEFAULT_TEXT_SIZE интерфейса Constants
     *
     * @return размер текста при чтении гимна
     */
    public float getTextSize() {
        return sharedPreferences.getFloat(TEXT_SIZE_SETTING_KEY, DEFAULT_TEXT_SIZE);
    }

    /**
     * При установке размера текста учитывается
     * минимальный и максимальный размер текста в виде констант
     * MAX_TEXT_HYMN_SIZE и MIN_TEXT_HYMN_SIZE
     */
    public void setTextSize(float textSize) {
        if (textSize < Constants.MAX_TEXT_HYMN_SIZE && textSize > Constants.MIN_TEXT_HYMN_SIZE) {
            SharedPreferences.Editor editor = sharedPreferences.edit();
            editor.putFloat(TEXT_SIZE_SETTING_KEY, textSize);
            editor.commit();
        }
    }
}
